/**
 * 用户的登录和注册的接口
 */
// 用这个包来生成 Token 字符串
const jwt = require('jsonwebtoken')
const database = require('../database/index')
const config = require('../config');


// 用户注册的处理函数
exports.register = (req, res) => {
    const userInfo = req.body
         // console.log(userInfo)
    // 校验用户名和密码是否为空
    if (!userInfo.username || !userInfo.password) {
        return res.json({ status: 1, message: '用户名或密码不能为空！' })
    }
    // 查询用户名和密码是否已存在
    const sqlSelect = `select * from ev_users where username=?`
    database.query(sqlSelect, userInfo.username, function (err, results) {
    // 执行 SQL 语句失败
        if (err) {
            return res.json({ status: 1, message: err.message })
        }
    // 用户名被占用
        if (results.length > 0) {
            return res.json({ status: 1, message: '用户名被占用，请更换其他用户名！' })
        }
    })
    const sqlAdd = 'insert into ev_users set ?'
    database.query(sqlAdd, { username: userInfo.username, password: userInfo.password }, function
        (err, results) {
// 执行 SQL 语句失败
        if (err) return res.json({ status: 1, message: err.message })
// SQL 语句执行成功，但影响行数不为 1
        if (results.affectedRows !== 1) {
            return res.json({ status: 1, message: '注册用户失败，请稍后再试！'})
        }
    })
    // 注册成功
    res.json({ status: 0, message: '注册成功！' })
    console.log('注册成功')
}



// 用户登录的处理函数
exports.login = (req, res) => {
    const userInfo = req.body
    // console.log(userInfo)
    const sql = `select * from ev_users where username=?`;
    database.query(sql, userInfo.username, function (err, results) {
        // console.log(results[0].Password)
        // console.log(results)
        // console.log(userInfo.password)
// 执行 SQL 语句失败
        if (err) return res.json(err)
// 执行 SQL 语句成功，但是查询到数据条数不等于 1 (说明该用户不存在)
        if (results.length !== 1) return res.json({ status: 1, message: '登录失败！' })
        // else return res.json(results)
// 拿着用户输入的密码,和数据库中存储的密码进行对比
        const compareResult = userInfo.username === results[0].Username && userInfo.password === results[0].Password;
// 如果对比的结果等于 false, 则证明用户输入的密码错误
        if (!compareResult) {
            console.log('登录失败！')
            return res.json({ status: 2, message: '登录失败！' })
        }
        else {
            console.log('登录成功！')
            // 生成Token  在生成 Token 字符串的时候，一定要剔除 密码 和 头像 的值
            const tokenStr = jwt.sign({ username: userInfo.username }, config.jwtSecretKey,
                { expiresIn: config.expiresIn });  // token有效期
            res.json({
                status: 0,
                message: '登录成功！',
                token: 'Bearer ' + tokenStr,
            });
        }
    })
}

